#!/bin/bash  
  
# 函数：比较两个文件的内容是否相同  
compare_files() {  
    local file1="$1"  
    local file2="$2"  
    if ! cmp -s "$file1" "$file2"; then  
        echo "文件内容不一致: $file1 vs $file2"  
        exit 1  
    fi  
}  
  
# 函数：递归地比较两个目录  
compare_dirs() {  
    local dir1="$1"  
    local dir2="$2"  
  
    # 获取目录1中的文件和子目录列表  
    local files1=($(find "$dir1" -type f -printf '%P\n'))  
    # 获取目录2中的文件和子目录列表  
    local files2=($(find "$dir2" -type f -printf '%P\n'))  
  
    # 检查文件数量是否相等  
    if [[ ${#files1[@]} -ne ${#files2[@]} ]]; then  
        echo "文件数量不一致: $dir1 vs $dir2"  
        exit 1  
    fi  
  
    # 排序文件列表以便比较  
    IFS=$'\n' sorted_files1=($(sort <<<"${files1[*]}"))  
    IFS=$'\n' sorted_files2=($(sort <<<"${files2[*]}"))  
    unset IFS  
  
    # 逐个比较文件内容  
    for ((i=0; i<${#sorted_files1[@]}; i++)); do  
        local file1="${dir1}/${sorted_files1[$i]}"  
        local file2="${dir2}/${sorted_files2[$i]}"  
        compare_files "$file1" "$file2"  
    done  
  
    # 递归地比较子目录（如果有的话）  
    local dirs1=($(find "$dir1" -type d -mindepth 1 -maxdepth 1 -printf '%P\n'))  
    local dirs2=($(find "$dir2" -type d -mindepth 1 -maxdepth 1 -printf '%P\n'))  
  
    for dir1 in "${dirs1[@]}"; do  
        local dir2_match=""  
        for dir2 in "${dirs2[@]}"; do  
            if [[ "$dir1" == "$dir2" ]]; then  
                dir2_match="$dir2"  
                break  
            fi  
        done  
  
        if [[ -z "$dir2_match" ]]; then  
            echo "目录不匹配: $dir1 in $dir1 vs $dir2"  
            exit 1  
        fi  
  
        compare_dirs "${dir1}/${dir1}" "${dir2}/${dir2_match}"  
    done  
}  
  
# 调用函数比较两个目录  
compare_dirs "$1" "$2"  
  
# 如果脚本执行到这里，说明两个目录完全一致  
echo "文件夹内容完全一致"
exit 0